package tools

import (
	"crypto/rand"
	"encoding/hex"
	"golang.org/x/crypto/bcrypt"
)

// GenerateRandomTenantID 随机生成租户ID
func GenerateRandomTenantID() (string, error) {
	// 生成 16 字节的随机数
	bytes := make([]byte, 16)
	_, err := rand.Read(bytes)
	if err != nil {
		return "", err
	}

	// 转换为十六进制字符串并前缀 q-
	return "q-" + hex.EncodeToString(bytes), nil
}

// HashPassword 对密码进行 bcrypt 加密
func HashPassword(password string) (string, error) {
	// 设定 bcrypt 工作因子，这里设置为 12 是一个合理的值
	// 工作因子越大，计算越耗时，安全性越高
	hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
	if err != nil {
		return "", err
	}
	return string(hash), nil
}

// CheckPasswordHash 验证密码是否正确
func CheckPasswordHash(password, hash string) bool {
	// 使用 bcrypt.CompareHashAndPassword 比较输入的密码和存储的哈希值
	err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
	if err != nil {
		return false
	}
	return true
}
